home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / alpha / source / x2d.d < prev   
Encoding:
Text File  |  2002-10-28  |  5.3 KB  |  181 lines

  1. // to convert any files into PowerD compatible files
  2. // 1.0 (21.11.2001) initial release
  3. // 1.1 (29.4.2002) DMX: added Delay(1) to free some cpu time, recompiled
  4. // 1.2 (03.08.2002) DMX: Added support for pragma & fd files.
  5. // 1.3 (09.08.2002) DMX: module files will be compiled now :)
  6.  
  7. MODULE 'exec/memory','reqtools','libraries/reqtools','intuition/intuition'
  8.  
  9. OPT OSVERSION=37,OPTIMIZE
  10. ENUM SOURCE
  11.  
  12. DEF ReqToolsBase=NIL,break=FALSE
  13.  
  14. PROC main()
  15.   DEF myargs:PTR TO LONG,rdargs=NIL,str[256]=NIL:STRING
  16.   DEF vers='$VER: x2d v1.3 by MarK and DMX (\x4d)'
  17.   myargs:=[NIL,NIL]
  18.   IFN ReqToolsBase:=OpenLibrary('reqtools.library',37) THEN Raise("RTLI")
  19.   IFN rdargs:=ReadArgs('SOURCE',myargs,NIL) THEN Raise("DOS")
  20.   EStrCopy(str,IF myargs[0] THEN myargs[0] ELSE FileReq(str))
  21.  
  22.   DEF filetype
  23.   IF StrCmp(str+EStrLen(str)-3,'.fd')
  24.     filetype:="fd"
  25.   ELSEIF StrCmp(str+EStrLen(str)-6,'_lib.h')
  26.     filetype:="pr"
  27.   ELSEIF StrCmp(str+EStrLen(str)-10,'_pragmas.h')
  28.     filetype:="spr"
  29.   ELSEIF StrCmp(str+EStrLen(str)-2,'.h')
  30.     filetype:="h"
  31.   ELSEIF StrCmp(str+EStrLen(str)-2,'.c')
  32.     filetype:="c"
  33.   ELSE
  34.     filetype:=NIL
  35.   ENDIF
  36.  
  37.   SELECT filetype
  38.     CASE "fd"; PrintF('FileType: \s\n','FD File')
  39.       convert2lib(str,3)
  40.     CASE "spr"; PrintF('FileType: \s\n','SAS/C Pragma File')
  41.       convert2lib(str,10)
  42.     CASE "pr"; PrintF('FileType: \s\n','Pragma File')
  43.       convert2lib(str,6)
  44.     CASE "h"; PrintF('FileType: \s\n','C-Header File')
  45.       converth2m(str)
  46.     CASE "c"; PrintF('FileType: \s\n','C-Source File. I can''t handle this one. Better use a C-Compiler ;)')
  47.     DEFAULT; PrintF('FileType: \s\n','Unknown')
  48.   ENDSELECT
  49.   IF break=TRUE THEN PrintF('Break.   \n') ELSE PrintF('Done.   \n')
  50.  
  51. EXCEPTDO
  52.   IF rdargs THEN FreeArgs(rdargs)
  53.   IF ReqToolsBase THEN CloseLibrary(ReqToolsBase)
  54. ENDPROC
  55.  
  56. PROC FileReq(nm:PTR TO CHAR)(PTR)
  57.   DEF name[256]:STRING,
  58.       requestedname[256]:STRING,
  59.       r:PTR TO rtFileRequester
  60.   IF r:=rtAllocRequestA(RTPREF_FILEREQ,NIL)
  61.     rtChangeReqAttr(r,
  62.       RTFI_MatchPat,'#?',
  63.       TAG_END)
  64.     IF rtFileRequest(r,name,'Select a file:',
  65.         RT_ReqPos,REQPOS_CENTERSCR,
  66.         RTFI_Flags,FREQF_PATGAD,
  67.         RTFI_OKText,'_Load',
  68.         RT_Underscore,"_",
  69.         TAG_END)
  70.       EStrCopy(requestedname,r.Dir)
  71.       AddPart(requestedname,name,255)
  72.       ReEStr(requestedname)
  73.       EStrCopy(nm,requestedname)
  74.     ENDIF
  75.     rtFreeRequest(r)
  76.   ENDIF
  77. ENDPROC nm
  78.  
  79. MODULE 'dos/dos'
  80.  
  81. PROC CompileAll(dir:PTR TO UBYTE)(BOOL)
  82.   DEF info:FileInfoBlock,lock,count=0,command[256]:STRING,n=0
  83.   IF lock:=Lock(dir,-2)
  84.     IF Examine(lock,info)
  85.       IF info.DirEntryType>0
  86.         WHILE ExNext(lock,info) DO count++
  87.       ELSE PrintFault(IOErr(),'ddir')
  88.     ELSE PrintFault(IOErr(),'ddir')
  89.     IF Examine(lock,info)
  90.       IF info.DirEntryType>0
  91.         WHILE ExNext(lock,info)
  92.           StringF(command,'pasm -F 2 "\s/\s"',dir,info.FileName)
  93.           Execute(command,NIL,NIL)
  94.           Delay(1)
  95.           n++
  96.           PrintF(' \d/\d\b',n,count)
  97.           IF CtrlC()
  98.             break:=TRUE
  99.             JUMP brk
  100.           ENDIF
  101.         ENDWHILE
  102.       ELSE PrintFault(IOErr(),'ddir')
  103.     ELSE PrintFault(IOErr(),'ddir')
  104. brk:
  105.     UnLock(lock)
  106.   ELSE PrintFault(IOErr(),'ddir')
  107. ENDPROC
  108.  
  109. PROC request(body,gadgets=NIL,args=NIL)(LONG)
  110.   IF gadgets=NIL THEN gadgets:='_Continue'
  111.   IFN ReqToolsBase
  112.     RETURN EasyRequestArgs(0,[SIZEOF_EasyStruct,0,'RayDream message:',body,gadgets]:EasyStruct,0,args)
  113.   ELSE
  114.     RETURN rtEZRequest(body,gadgets,NIL,args,
  115.       RT_Underscore,"_",
  116.       RT_ReqPos,REQPOS_CENTERSCR,
  117.       RTEZ_ReqTitle,'Message:',
  118.       TAG_END)
  119.   ENDIF
  120. ENDPROC
  121.  
  122. PROC convert2lib(str[]:STRING,number:INT)
  123.   DEF command[256]=NIL:STRING,tmp[256]=NIL:STRING
  124.   PrintF('Converting to PowerD compatible module...\n')
  125.   EStrCopy(tmp,str, EStrLen(str)-number)
  126.   IF number=3
  127.     StringF(command,'fd2m "\s"',str)
  128.   ELSEIF number=6
  129.     StringF(command,'pr2m "\s"',tmp)
  130.   ELSEIF number=10
  131.     StringF(command,'pr2m SASC "\s"',tmp)
  132.   ENDIF
  133.   Execute(command,NIL,NIL)
  134.   PrintF('Compiling the ascii module and generating ppc interface...\n')
  135.   str[StrLen(str)-number]:="\0"
  136.   IF StrCmp(str+StrLen(str)-4,'_lib')
  137.     str[StrLen(str)-4]:="\0"
  138.     StrAdd(str,'.m')
  139.   ENDIF
  140.   StringF(command,'dc "\s" >nil: lg t:library',str)
  141.   Execute(command,NIL,NIL)
  142.   PrintF('Generating linklib file...\n')
  143.   CompileAll('t:library')
  144.   str[StrLen(str)-2]:="\0"
  145.   IF number=3
  146.     StringF(command,'join t:library/#?.o as "\sbase.lib"',str)
  147.   ELSE
  148.     StringF(command,'join t:library/#?.o as "\sbase.lib"',tmp)
  149.   ENDIF
  150.   Execute(command,NIL,NIL)
  151.   Execute('delete t:library all quiet force',NIL,NIL)
  152.   IFN break
  153.     IF 1=request('Copy generated files into the PowerD subdirectories?','_Yes|_No')
  154.       StringF(command,'copy "\s.m" "\s.b" to dmodules: quiet',str,str)
  155.       Execute(command,NIL,NIL)
  156.       IF number=3
  157.         StringF(command,'copy "\sbase.lib" to d:lib/modules quiet',str)
  158.       ELSE
  159.         StringF(command,'copy "\sbase.lib" to d:lib/modules quiet',tmp)
  160.       ENDIF
  161.       Execute(command,NIL,NIL)
  162.     ENDIF
  163.   ENDIF
  164. ENDPROC
  165.  
  166. PROC converth2m(str[]:STRING)
  167.   DEF command[256]=NIL:STRING
  168.   PrintF('Converting C-Header to PowerD compatible module...\n')
  169.   StringF(command,'h2m "\s"',str)
  170.   Execute(command,NIL,NIL)
  171.  
  172.   IF StrCmp(str+EStrLen(str)-2,'.h')
  173.     str[EStrLen(str)-2]:="\0"
  174.     StrAdd(str,'.m')
  175.   ENDIF
  176.  
  177.   StringF(command,'dc "\s" >nil:',str)
  178.   Execute(command,NIL,NIL)
  179.  
  180. ENDPROC
  181.